Network switches may be used to route data between network devices in a computer network. A switch can receive input data from multiple modules and can output data to multiple modules. At times, the data routed to a particular device may exceed the receiving device's capacity to process the data. This data traffic congestion may result in the device either delaying processing of the data, or dropping the data.
An approach to dealing with data traffic congestion in network switches may include using virtual output queuing (VOQ), in which multiple virtual input queues at the input ports of the switch can be used to simulate an efficient output queuing scheme for routing traffic through the switch. A central arbiter within the switch can coordinate the traffic flows from the input ports to the output ports and can handle the necessary messaging the input ports and the output ports of the switch. While VOQ provides an efficient traffic management scheme, the required central arbiter and messaging is expensive to implement in a commercial off the shelf switch. In addition, the granularity of the messaging and queuing is typically associated with the physical system attributes (e.g., the number of ports in a switch) and not capable of supporting finer granularity of messaging such as at the flow granularity.
A more inexpensive approach is to use simple input buffers to manage the traffic flow through the switch, and when data traffic congestion exists to use a link level pause to halt all input traffic entering the switch on a particular input port when a traffic flow entering the switch on the input port exceeds a preset threshold level. However, this approach results in head-of-line blocking, which can degrade the performance of the switch significantly.